﻿#ifndef WRSOFT_UTILITY_CONFIG_H
#define WRSOFT_UTILITY_CONFIG_H

#include <QUuid>
#include <QString>
#include <QDomElement>

namespace WRConfig
{
    //从配置节中读取指定名称的字符串值。
    inline QString readValue(const QDomElement& config, const QString& name)
    {
        //尝试从属性中读取值
        QString value = config.attribute(name);
        if (value.isNull())
        {
            //尝试从子节点中读取值
            QDomElement element = config.firstChildElement(name);
            if (!element.isNull())
            {
                value = element.text();
            }
        }
        return value;
    }

    //读取标识。
    inline QUuid readUuid(const QDomElement& config)
    {
        QChar literal[] = {'u', 'u', 'i', 'd'};
        QString string = QString::fromRawData(literal, 4);
        QString value = WRConfig::readValue(config, string);
        if (!value.isNull())
        {
            return QUuid(value);
        }
        return QUuid();
    }

    //从配置节中读取名称。
    inline QString readName(const QDomElement& config)
    {
        QChar literal[] = {'n', 'a', 'm', 'e'};
        QString string = QString::fromRawData(literal, 4);
        return readValue(config, string);
    }
    //从配置节中读取标题。
    inline QString readTitle(const QDomElement& config)
    {
        QChar literal[] = {'t', 'i', 't', 'l', 'e'};
        QString string = QString::fromRawData(literal, 5);
        return readValue(config, string);
    }
    //从配置节中读取描述。
    inline QString readDescription(const QDomElement& config)
    {
        QChar literal[] = {'d', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n'};
        QString string = QString::fromRawData(literal, 11);
        return readValue(config, string);
    }

    //读取类名称。
    inline QString readClass(const QDomElement& config)
    {
        QChar literal[] = {'c','l', 'a', 's', 's'};
        QString string = QString::fromRawData(literal, 5);
        return readValue(config, string);
    }
}

#endif // WRSOFT_UTILITY_CONFIG_H
